Page Index
2 A 后台用户权限控制
JL 于 2021-10-18 17:39:55 +08:00 修改了此页面
此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

用户权限系统

系统概述

  • 一个用户权限管理系统,主要包括三个元素:用户、角色、权限。我们所要管理的,也就是用户、角色和权限之间的关系
  • 用户基本上所有的应用,无论是移动端,PC端,C端或B端产品,登陆都需要一个用户。只是对于C端的产品,都是用户自己注册即可。而对于后台产品而言,是需要公司内部人员去创建用户的。
  • 角色:所谓角色,就是用来控制各个用户的操作范围的,可以理解为权限组。因为一个系统中权限太多,我们不可能每创建一个用户,就去挨个设置一遍权限,因此可以根据不同的部门、职级、工作内容等来对权限进行分组,制定成不同的角色,这样,在创建用户时,就可以直接赋予用户不同的角色,从而把角色拥有的权限给到这个用户。
  • 系统的主要流程为:将权限设置成不同的集合,即角色,再将角色绑定到用户上,那么这个用户就拥有了这些角色的权限集合。一个用户可以绑定多个角色,一个角色又拥有多个权限。

如上图所示用户A拥有了角色1和角色2两个角色,从而拥有了“增加、删除、审核”的权限。

管理流程

  • 菜单管理:可以理解为每个菜单就是一个不同的权限,通过不同的”权限标识“区分

  • 角色管理:不同角色设置不同权限

  • 用户管理:管理用户用户信息,并将相应角色授予用户

演示账号说明

  • 我们演示环境为了方便给大家展示,创建了几个演示角色和账号,本地代码是没有的,如果有需要可以自己对照演示环境的角色和账号添加进来

前端控制

前端主要使用vuex保存用户的权限信息,然后通过v-if 判断是否有权限,如果有权限就渲染这个dom元素。 我们以公众号用户管理页面来讲解

从vuex 获取保存的permissions,结合avue-crud组件实现操作按钮的显隐

<avue-crud ref="crud"
     :page.sync="page"
     :data="tableData"
     :permission="permissionList"
     :option="tableOption"
     v-model="form"
     @on-load="getPage"
     @refresh-change="refreshChange"
     @row-update="handleUpdate"
     @row-save="handleSave"
     @row-del="handleDel">
</avue-crud>
computed: {
      ...mapGetters(['permissions']),
      permissionList() {
        return {
          addBtn: this.permissions['wxmp:wxuser:add'] ? true : false,
          delBtn: this.permissions['wxmp:wxuser:del'] ? true : false,
          editBtn: this.permissions['wxmp:wxuser:edit'] ? true : false,
          viewBtn: this.permissions['wxmp:wxuser:get'] ? true : false,
        }
      }
    }

单独按钮结合v-if实现操作按钮的显隐

<el-button type="success"
    @click="doMore()"
    size="small"
    icon="el-icon-document"
    v-if="permissions['wxmp:wxuser:edit']">其他操作</el-button>

后端控制

  • 注解@PreAuthorize,通过获取用户菜单列表,和请求的地址和请求方法对比判断有没有权限
@ApiOperation(value = "通过id查询微信用户")
@GetMapping("/{id}")
@PreAuthorize("@ato.hasAuthority('wxmp:wxuser:get')")
public R getById(@PathVariable("id") String id){
    return R.ok(wxUserService.getById(id));
}
  • 上面的权限要在后台菜单管理中添加,并授权给了用户的角色,具体请查看文档:A 代码生成器使用说明、菜单权限配置